package Callable;

public class Demo1 {

    static class Result{
        public int sum=0;
        public Object locker=new Object();

    }

    public static void main(String[] args) throws InterruptedException {
        Result result=new Result();

        //创建一个线程，计算1-1000的和
        Thread t=new Thread() {
            @Override
            public void run() {
                int sum=0;
                for (int i = 0; i <=1000; i++) {
                    sum+=i;
                }
                result.sum=sum;

                synchronized (result.locker) {
                    result.locker.notify();
                }
            }
        };
        t.start();

        //此处我们希望，t线程的计算结果能够被主线程获取到
        //因此需要引入 辅助类 Result

        //这样写无法得到最终的和，因为t线程和主线程是并发的关系，执行的先后顺序不确定
        //System.out.println(result.sum);

        //解决方案：让主线程wait()等待 t线程 运行结束后，再通知唤醒main线程
        synchronized (result.locker) {
            while (result.sum==0) {
                result.locker.wait();
            }
        }
        System.out.println(result.sum);

    }
}
